const express=require('express')
const path = require('path');
const bodyParser=require('body-parser')//1.处理post请求参数
const session=require('express-session')

// 导入art-template
const template = require('art-template')
// 导入dateFormat（对日期进行处理）
const dateFormat  =require('dateformat')
// 导入morgan，即在开发环境下在服务器中能有相应的输出
const morgan = require('morgan');
// 导入config，根据不同的环境自动进行不同的配置
// 注意：在环境变量里面配置了密码，那么就得在管理员权限下的PowerShell下运行
const config = require('config')
// console.log(config.get("title"));

// 数据库连接
require('./model/connect');
// 创建用户
// require('./model/user')

// 创建网站服务器
const app=express();

app.use(bodyParser.urlencoded({extended:false}))//2.处理post请求参数

app.use(session({
    secret:'secret key',
    // 对于未登录成功不生成session
    saveUninitialized:false,
    // 设置cookie失效时间：（以毫秒为单位）
    cookie:{
        maxAge:24*60*60*1000
    }
}));//配置session

// 模板配置
app.set('views',path.join(__dirname,'views'));//模板位置
app.set('view engine','art')//模板默认后缀
app.engine('art',require('express-art-template'))//所需模板引擎指定

// 向模板内部导入dateFormate变量
template.defaults.imports.dateFormat=dateFormat;

// 开放静态资源文件
app.use(express.static(path.join(__dirname,'public')))

// 获取系统环境变量，返回值是对象
if(process.env.NODE_ENV == 'development'){
    console.log('当前是开发环境');
    // 在开发环境中，把客户端发给服务端的请求信息打印到控制台
    app.use(morgan('dev'))
}else{
    console.log('当前是生产环境');
}

// 引入路由模块
const home=require('./route/home')
const admin=require('./route/admin')

// 拦截请求，判断用户登录状态（这一步要放在路由匹配请求路径之前）
app.use('/admin',require('./middleware/loginGuard'))

// 注意不要加点
app.use('/home',home);
app.use('/admin',admin);

// 重定向（中间件）
app.use((err,req,res,next)=>{
    const result=JSON.parse(err);//转对象
    let params=[];
    for(let attr in result){
        if(attr !='path'){
            // 下列语法功能：attr='message'（其实就是对象属性的一种写法+字符串拼接）
            params.push(attr+'='+result[attr])
        }
    }
    res.redirect(`${result.path}?${params.join('&')}`)

})

app.listen(80);
console.log('服务器启动。访问localhost');


